package com.xyy.saas.payment.merchant.core.dto;

import com.xyy.saas.payment.common.exception.PaymentException;
import com.xyy.saas.payment.cores.enums.ResultCodeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang.StringUtils;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MerchantCardBindDto {
    /**
     * 申请单号
     */
    private String applyNo;
    /**
     * 绑定卡类型，默认对公
     * PUBLIC 对公
     * PRIVATE 对私
     */
    private String cardType;
    /**
     * 账户渠道选择 目前仅支持aggregate
     */
    private String accountChannel;

    /**
     * 收款者银行开户名
     */
    private String settleName;

    /**
     * 手机号
     */
    private String mobile;

    /**
     * 开户行名称
     */
    private String openBank;

    /**
     * 开户行简称
     */
    private String openBankCode;
    /**
     * 开户支行号
     */
    private String branchBankCd;
    /**
     * 开户支行名称
     */
    private String branchBankName;
    /**
     * 接收者银行账号/卡号
     */
    private String account;

    /**
     * 接口调用方的业务类型, 支付平台分配
     */
    private String businessIdType;

    /**
     * 接口调用方的用户id
     */
    private String businessUserId;

    /**
     * 额外参数 map 转 json 格式
     * ******************************
     * 富民需要手机验证码
     * key: activeCode
     * ******************************
     */
    private String extra;

    /**
     * 用户id
     */
    private String userId;

    /**
     * 联系人名称
     */
    private String contactName;

    /**
     * 联系人身份证号
     */
    private String contactIdCard;

    /**
     * 联系人电话
     */
    private String contactPhone;

    /**
     * 回调地址
     */
    private String callback;
    /**
     * 业务申请单号
     */
    private String businessOrderNo;

    /**
     * 法人信息
     */
    // 法人姓名
    private String corporationName;
    // 法人身份证号
    private String corporationIdNo;
    // 法人联系电话
    private String corporationPhone;

    /**
     * 重发验证码 0:否 1:是
     */
    private Integer resendCode;

    /**
     * 参数校验
     */
    public void checkParam() throws PaymentException {
        if(StringUtils.isBlank(cardType)) {
            throw new PaymentException(ResultCodeEnum.PARAM_ERROR.getCode(), "银行卡类型不能为空");
        }

        if(StringUtils.isBlank(account)) {
            throw new PaymentException(ResultCodeEnum.PARAM_ERROR.getCode(), "银行账号不能为空");
        }

        if(StringUtils.isBlank(openBankCode)) {
            throw new PaymentException(ResultCodeEnum.PARAM_ERROR.getCode(), "银行编码不能为空");
        }

        if(StringUtils.isBlank(branchBankCd)) {
            throw new PaymentException(ResultCodeEnum.PARAM_ERROR.getCode(), "支行编码不能为空");
        }
    }
}
